package 力扣面试经典150;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2024-03-04
 * Time:21:13
 */

import sun.swing.StringUIClientPropertyKey;

/**
 * 力扣面试经典150:151. 反转字符串中的单词
 * 中等
 * 相关标签
 * 相关企业
 * 给你一个字符串 s ，请你反转字符串中 单词 的顺序。
 * 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
 * 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
 * 注意：输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中，单词间应当仅用单个空格分隔，且不包含任何额外的空格。
 * 示例 1：
 * 输入：s = "the sky is blue"
 * 输出："blue is sky the"
 */
public class reverseWords {
    public static void main(String[] args) {
        System.out.println(reverseWords("  the sky  is blue"));
    }
    public static String reverseWords(String s) {
//        超出时间限制
//        StringBuffer str = new StringBuffer();
//        int len = s.length();
//        int cur = len - 1;
//        int f = len;
//        boolean isnull = true;
//        while (cur >= 0){
//             if (s.charAt(cur) == ' ' && !isnull){
//                str.append(s.substring(cur,f));
//                f = cur;
//                str.append(" ");
//                cur--;
//            } else if (s.charAt(cur) != ' '){
//                cur--;
//                isnull = false;
//            }
//        }
//        str.append(s.subSequence(0,f));
//        return str.toString();
        int m = s.length() - 1;
        StringBuilder res = new StringBuilder();

        while (s.charAt(m) == ' ' && m > 0) m--;
        int n = m;

        while (m >= 0) {
            while (m >= 0 && s.charAt(m) != ' ') m--;
            res.append(s.substring(m + 1, n + 1)).append(" ");

            while (m >= 0 && s.charAt(m) == ' ') m--;
            n = m;
        }

        return res.toString().trim();
    }
}
